/**
 * 小程序图片配置管理工具
 * 用于统一管理小程序中使用的图片资源
 */

import { get } from './request.js'
import { convertToHttpsImageUrl } from './imageUtils.js'

// 移除缓存机制，改为实时请求以确保数据同步
// let imageConfigCache = null
// let cacheTimestamp = 0
// const CACHE_DURATION = 5 * 60 * 1000 // 5分钟缓存

// 默认图片配置（作为后备）
const DEFAULT_IMAGES = {
  // 发现页面
  discover: {
    discover_background: {
      name: '发现页背景图',
      url: '/static/background.jpg',
      type: 'background'
    },
    discover_banner_1: {
      name: '发现页轮播图1',
      url: '/static/logo.jpg',
      type: 'banner'
    },
    discover_brand_bg: {
      name: '品牌介绍背景图',
      url: '/static/icons/21d3be7614c2c24dda59c2a40eb33649.jpg',
      type: 'decoration'
    },
    discover_service_bg: {
      name: '特色服务背景图',
      url: '/static/icons/1.jpg',
      type: 'decoration'
    },
    service_icon_custom: {
      name: '专业定制图标',
      url: '/static/icons/0.jpg',
      type: 'icon'
    },
    service_icon_quality: {
      name: '品质保证图标',
      url: '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg',
      type: 'icon'
    },
    service_icon_support: {
      name: '售后服务图标',
      url: '/static/icons/09.webp',
      type: 'icon'
    },
    service_icon_experience: {
      name: '线下体验图标',
      url: '/static/icons/3.jpg',
      type: 'icon'
    }
  },
  
  // 预约页面
  appointment: {
    appointment_background: {
      name: '预约页背景图',
      url: '/static/background.jpg',
      type: 'background'
    },
    appointment_intro_image: {
      name: '预约介绍图',
      url: '/static/icons/0.jpg',
      type: 'decoration'
    },
    appointment_wechat_icon: {
      name: '微信图标',
      url: '/static/icons/wechat.png',
      type: 'icon'
    },
    appointment_phone_icon: {
      name: '电话图标',
      url: '/static/icons/phone.png',
      type: 'icon'
    },
    appointment_advantage_bg: {
      name: '服务优势背景图',
      url: '/static/icons/e52fec01eaee93ae47cf0ffaf17cf665.jpg',
      type: 'decoration'
    },
    appointment_arrow_down: {
      name: '流程箭头图标',
      url: '/static/icons/arrow-down.png',
      type: 'icon'
    },
    advantage_icon_experience: {
      name: '实物体验图标',
      url: '/static/icons/0.jpg',
      type: 'icon'
    },
    advantage_icon_consult: {
      name: '专业咨询图标',
      url: '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg',
      type: 'icon'
    },
    advantage_icon_custom: {
      name: '个性定制图标',
      url: '/static/icons/3.jpg',
      type: 'icon'
    },
    advantage_icon_quality: {
      name: '品质保证图标',
      url: '/static/icons/09.webp',
      type: 'icon'
    }
  },
  
  // 分类页面
  category: {
    category_background: {
      name: '分类页背景图',
      url: '/static/background.jpg',
      type: 'background'
    },
    category_decoration: {
      name: '分类页装饰图',
      url: '/static/icons/82b7bbcbef19ede7b9f139d6068994ce.jpg',
      type: 'decoration'
    },
    // 分类图标配置
    category_icon_ring: {
      name: '戒圈戒指图标',
      url: '/static/classes/1.jpg',
      type: 'icon'
    },
    category_icon_necklace: {
      name: '吊坠项链图标',
      url: '/static/classes/2.jpg',
      type: 'icon'
    },
    category_icon_earring: {
      name: '耳饰图标',
      url: '/static/classes/3.jpg',
      type: 'icon'
    },
    category_icon_bracelet: {
      name: '手镯手链图标',
      url: '/static/classes/4.png',
      type: 'icon'
    },
    category_icon_diamond: {
      name: '星钻图标',
      url: '/static/classes/5.jpg',
      type: 'icon'
    }
  },
  
  // 购物车页面
  cart: {
    cart_delete_icon: {
      name: '删除图标',
      url: '/static/icons/delete.png',
      type: 'icon'
    },
    cart_empty_image: {
      name: '购物车空状态图',
      url: '/static/images/empty-cart.png',
      type: 'placeholder'
    }
  },
  
  // 合作页面
  cooperation: {
    cooperation_background: {
      name: '合作页背景图',
      url: '/static/background.jpg',
      type: 'background'
    },
    cooperation_banner: {
      name: '合作招募横幅',
      url: '/static/icons/定制图.jpg',
      type: 'banner'
    },
    vip_intro_banner: {
      name: 'VIP介绍横幅',
      url: '/static/icons/4.jpg',
      type: 'banner'
    },
    vip_silver_icon: {
      name: '银卡会员图标',
      url: '/static/icons/7bf41bf4e46a0f9b023ff8153baa6538bb6796fd501d1-aL2tWF.jpg',
      type: 'icon'
    },
    vip_gold_icon: {
      name: '金卡会员图标',
      url: '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg',
      type: 'icon'
    },
    vip_diamond_icon: {
      name: '钻石会员图标',
      url: '/static/icons/21d3be7614c2c24dda59c2a40eb33649.jpg',
      type: 'icon'
    },
    vip_benefit_discount_icon: {
      name: 'VIP专属折扣图标',
      url: '/static/icons/0.jpg',
      type: 'icon'
    },
    vip_benefit_priority_icon: {
      name: 'VIP优先服务图标',
      url: '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg',
      type: 'icon'
    },
    vip_benefit_maintenance_icon: {
      name: 'VIP免费保养图标',
      url: '/static/icons/09.webp',
      type: 'icon'
    },
    vip_benefit_service_icon: {
      name: 'VIP专属客服图标',
      url: '/static/icons/3.jpg',
      type: 'icon'
    }
  },
  
  // 个人中心页面
  profile: {
    profile_default_avatar: {
      name: '默认头像',
      url: '/static/images/default-avatar.png',
      type: 'placeholder'
    }
  },
  
  // 订单页面
  order: {
    order_empty_image: {
      name: '订单空状态图',
      url: '/static/images/empty-order.png',
      type: 'placeholder'
    }
  },
  
  // 地址页面
  address: {
    address_empty_image: {
      name: '地址空状态图',
      url: '/static/images/empty-address.png',
      type: 'placeholder'
    }
  },
  
  // 支付页面
  payment: {
    payment_wechat_icon: {
      name: '微信支付图标',
      url: '/static/images/wechat-pay.png',
      type: 'icon'
    },
    payment_loading_icon: {
      name: '支付加载图标',
      url: '/static/images/loading.gif',
      type: 'icon'
    }
  },
  
  // 商品详情页面
  product: {
    product_default_image: {
      name: '商品默认图',
      url: '/static/images/default-product.jpg',
      type: 'placeholder'
    }
  },
  
  // 首页
  index: {
    index_logo: {
      name: '首页Logo',
      url: '/static/logo.png',
      type: 'icon'
    }
  }
}

/**
 * 从服务器获取图片配置
 * @returns {Promise<Object>} 图片配置对象
 */
async function fetchImageConfig() {
  try {
    const response = await get('/public/miniapp-images')
    if (response.success && response.data) {
      return response.data
    }
  } catch (error) {
    console.warn('获取图片配置失败，使用默认配置:', error)
  }
  
  return DEFAULT_IMAGES
}

/**
 * 获取图片配置（实时请求，不使用缓存）
 * @param {boolean} forceRefresh - 保留参数兼容性，但不再使用
 * @returns {Promise<Object>} 图片配置对象
 */
export async function getImageConfig(forceRefresh = false) {
  // 直接获取最新配置，不使用缓存
  const config = await fetchImageConfig()
  return config
}

/**
 * 根据图片键获取图片URL
 * @param {string} imageKey - 图片配置键
 * @param {string} pageName - 页面名称（可选，用于优化查找）
 * @returns {Promise<string>} 图片URL
 */
export async function getImageUrl(imageKey, pageName = null) {
  try {
    const config = await getImageConfig()
    
    let imageInfo = null
    
    if (pageName && config[pageName] && config[pageName][imageKey]) {
      // 直接从指定页面查找
      imageInfo = config[pageName][imageKey]
    } else {
      // 遍历所有页面查找
      for (const page of Object.values(config)) {
        if (page[imageKey]) {
          imageInfo = page[imageKey]
          break
        }
      }
    }
    
    if (imageInfo && imageInfo.url) {
      // 使用图片URL处理工具转换URL
      return convertToHttpsImageUrl(imageInfo.url)
    }
    
    // 如果找不到配置，返回默认图片
    console.warn(`未找到图片配置: ${imageKey}`)
    return convertToHttpsImageUrl('/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg')
    
  } catch (error) {
    console.error('获取图片URL失败:', error)
    return convertToHttpsImageUrl('/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg')
  }
}

/**
 * 获取指定页面的所有图片配置
 * @param {string} pageName - 页面名称
 * @returns {Promise<Object>} 页面图片配置对象
 */
export async function getPageImages(pageName) {
  try {
    const config = await getImageConfig()
    const pageConfig = config[pageName] || {}
    
    // 转换所有图片URL
    const result = {}
    for (const [key, imageInfo] of Object.entries(pageConfig)) {
      result[key] = {
        ...imageInfo,
        url: convertToHttpsImageUrl(imageInfo.url)
      }
    }
    
    return result
  } catch (error) {
    console.error('获取页面图片配置失败:', error)
    return {}
  }
}

/**
 * 分类名称到图片键的映射
 */
const CATEGORY_IMAGE_KEY_MAP = {
  '戒圈戒指': 'category_icon_ring',
  '吊坠项链': 'category_icon_necklace',
  '耳饰': 'category_icon_earring',
  '手镯手链': 'category_icon_bracelet',
  '星钻': 'category_icon_diamond'
}

/**
 * 硬编码的分类图标映射（作为后备）
 */
const FALLBACK_CATEGORY_IMAGES = {
  '戒圈戒指': '/static/classes/1.jpg',
  '吊坠项链': '/static/classes/2.jpg',
  '耳饰': '/static/classes/3.jpg',
  '手镯手链': '/static/classes/4.png',
  '星钻': '/static/classes/5.jpg'
}

/**
 * 根据分类名称获取分类图标URL
 * @param {string} categoryName - 分类名称
 * @returns {Promise<string>} 分类图标URL
 */
export async function getCategoryIconUrl(categoryName) {
  try {
    const imageKey = CATEGORY_IMAGE_KEY_MAP[categoryName]
    if (!imageKey) {
      console.warn(`未找到分类 "${categoryName}" 对应的图片键，使用后备图片`)
      return convertToHttpsImageUrl(FALLBACK_CATEGORY_IMAGES[categoryName] || '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg')
    }

    // 尝试从配置系统获取
    const configUrl = await getImageUrl(imageKey, 'category')
    return configUrl
  } catch (error) {
    console.warn('获取分类图标URL失败，使用后备图片:', error)
    // 如果配置系统失败，使用硬编码的后备图片
    return convertToHttpsImageUrl(FALLBACK_CATEGORY_IMAGES[categoryName] || '/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg')
  }
}

/**
 * 批量获取图片URL
 * @param {Array} imageKeys - 图片键数组，格式: ['key1', 'key2'] 或 [{key: 'key1', page: 'page1'}, ...]
 * @returns {Promise<Object>} 图片URL对象，键为图片键，值为URL
 */
export async function getBatchImageUrls(imageKeys) {
  try {
    const config = await getImageConfig()
    const result = {}
    
    for (const item of imageKeys) {
      let imageKey, pageName
      
      if (typeof item === 'string') {
        imageKey = item
        pageName = null
      } else {
        imageKey = item.key
        pageName = item.page
      }
      
      let imageInfo = null
      
      if (pageName && config[pageName] && config[pageName][imageKey]) {
        imageInfo = config[pageName][imageKey]
      } else {
        // 遍历所有页面查找
        for (const page of Object.values(config)) {
          if (page[imageKey]) {
            imageInfo = page[imageKey]
            break
          }
        }
      }
      
      if (imageInfo && imageInfo.url) {
        result[imageKey] = convertToHttpsImageUrl(imageInfo.url)
      } else {
        result[imageKey] = convertToHttpsImageUrl('/static/icons/08ff0bd53a8643cd360e68f761bc2c25.jpg')
      }
    }
    
    return result
  } catch (error) {
    console.error('批量获取图片URL失败:', error)
    return {}
  }
}

/**
 * 清除图片配置缓存（已移除缓存机制，保留函数兼容性）
 */
export function clearImageConfigCache() {
  // 缓存机制已移除，此函数保留仅为兼容性
  console.log('图片配置缓存已移除，现在使用实时请求')
}

/**
 * 预加载指定页面的图片
 * @param {string} pageName - 页面名称
 * @returns {Promise<void>}
 */
export async function preloadPageImages(pageName) {
  try {
    const pageImages = await getPageImages(pageName)
    
    // 创建图片预加载Promise数组
    const preloadPromises = Object.values(pageImages).map(imageInfo => {
      return new Promise((resolve) => {
        const img = new Image()
        img.onload = resolve
        img.onerror = resolve // 即使加载失败也继续
        img.src = imageInfo.url
      })
    })
    
    // 等待所有图片加载完成（或失败）
    await Promise.all(preloadPromises)
    console.log(`页面 ${pageName} 的图片预加载完成`)
    
  } catch (error) {
    console.warn('预加载页面图片失败:', error)
  }
}

// 默认导出
export default {
  getImageConfig,
  getImageUrl,
  getPageImages,
  getBatchImageUrls,
  clearImageConfigCache,
  preloadPageImages
}
